home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 July: Technology Seed / ADC Seed CD - July 1999.toast / Carbon SDK 1.0d10c3 / Sample Code / AppearanceSample / TextPane.cp < prev    next >
Encoding:
Text File  |  1999-05-01  |  5.0 KB  |  195 lines  |  [TEXT/CWIE]

  1. /*
  2.     File:        TextPane.cp
  3.  
  4.     Contains:    Class to drive our text pane in MegaDialog.
  5.  
  6.     Version:    Appearance 1.0 SDK
  7.  
  8.     Copyright:    © 1997 by Apple Computer, Inc., all rights reserved.
  9.  
  10.     File Ownership:
  11.  
  12.         DRI:                Edward Voas
  13.  
  14.         Other Contact:        7 of 9, Borg Collective
  15.  
  16.         Technology:            OS Technologies Group
  17.  
  18.     Writers:
  19.  
  20.         (edv)    Ed Voas
  21.  
  22.     Change History (most recent first):
  23.  
  24.          <2>     9/25/97    edv        Use an STR# to get the list box items. Pretty it up.
  25.          <1>     9/11/97    edv        First checked in.
  26. */
  27.  
  28. #include "AppearanceSamplePrefix.h"
  29.  
  30. #include <Appearance.h>
  31. #include <Sound.h>
  32. #include <TextUtils.h>
  33. #include "TextPane.h"
  34. #include "AppearanceHelpers.h"
  35.  
  36. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  37. //    Enums, etc.
  38. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  39.  
  40. enum
  41. {
  42.     kStaticText            = 1,
  43.     kDisabledStaticText    = 2,
  44.     kEditText             = 3,
  45.     kPasswordEditText    = 4,
  46.     kEditFilterText        = 5,
  47.     kClock                = 6,
  48.     kListBox            = 7,
  49.     kShowPasswordButton    = 8,
  50.     kPasswordStaticText    = 10
  51. };
  52.  
  53. enum
  54. {
  55.     kLeftArrow        = 0x1C,
  56.     kRightArrow        = 0x1D,
  57.     kUpArrow        = 0x1E,
  58.     kDownArrow        = 0x1F,
  59.     kBackspace        = 0x08
  60. };
  61.  
  62. enum
  63. {
  64.     kListBoxStringsID    = 130
  65. };
  66.  
  67. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  68. //    Our keyfilter callback.
  69. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  70.  
  71. ControlKeyFilterUPP TextPane::fFilterProc = NewControlKeyFilterProc( TextPane::NumericFilter );
  72.  
  73. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  74. //    Ä TextPane
  75. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  76. //    Constructor. Append our DITL and load our list box, etc.
  77. //
  78. TextPane::TextPane( DialogPtr dialog, SInt16 items ) : MegaPane( dialog, items )
  79. {
  80.     ControlHandle        control;
  81.     ListHandle            list;
  82.     OSErr                err;
  83.     
  84.     AppendDialogItemList( dialog, 6004, overlayDITL );
  85.     
  86.     GetDialogItemAsControl( dialog, items + kDisabledStaticText, &control );
  87.     DeactivateControl( control );
  88.     
  89.     GetDialogItemAsControl( dialog, items + kListBox, &control );
  90.     err = GetListBoxListHandle( control, &list );
  91.     if ( err == noErr )
  92.     {
  93.         Cell        cell;
  94.         SInt16        i;
  95.         Str255        string;
  96.         Rect        dataBounds;
  97.  
  98.         cell.h = 0;
  99.         
  100.         for ( i = 1; true; i++ )
  101.         {
  102.             GetIndString( string, kListBoxStringsID, i );
  103.             if ( string[0] == 0 ) break;
  104.                     
  105.             GetListDataBounds( list, &dataBounds );
  106.             LAddRow( 1, dataBounds.bottom, list );
  107.  
  108.             GetListDataBounds( list, &dataBounds );
  109.             cell.v = dataBounds.bottom - 1;
  110.             LSetCell( (Ptr)(string + 1), string[0], cell, list );
  111.         }
  112.     }
  113.     
  114.     GetDialogItemAsControl( dialog, items + kEditFilterText, &control );
  115.     SetEditTextKeyFilter( control, fFilterProc );
  116.     
  117.     RequestIdleTime( GetCaretTime() * 100 / 6 );
  118. }
  119.  
  120. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  121. //    Ä ~TextPane
  122. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  123. //    Destructor. Get rid of our DITL items.
  124. //
  125. TextPane::~TextPane()
  126. {
  127.     ShortenDITL( fDialog, CountDITL( fDialog ) - fOrigItems );
  128. }
  129.  
  130. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  131. //    Ä Idle
  132. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  133. //    Give our dialog some idle time.
  134. //
  135. void
  136. TextPane::Idle()
  137. {
  138.     IdleControls( GetDialogWindow( fDialog ) );
  139. }
  140.  
  141. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  142. //    Ä ItemHit
  143. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  144. //    Our item hit handler. Here we handle clicks on our items.
  145. //
  146. void
  147. TextPane::ItemHit( SInt16 itemHit )
  148. {
  149.     SInt16            localItem = itemHit - fOrigItems;
  150.     ControlHandle    control;
  151.     Str255            text;
  152.     
  153.     switch ( localItem )
  154.     {
  155.         case kShowPasswordButton:
  156.             GetDialogItemAsControl( fDialog, fOrigItems + kPasswordEditText, &control );
  157.             GetEditTextPasswordText( control, text );
  158.             GetDialogItemAsControl( fDialog, fOrigItems + kPasswordStaticText, &control );
  159.             SetStaticTextText( control, text, true );
  160.             break;
  161.     }
  162. }
  163.  
  164. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  165. //    Ä NumericFilter                                                            CALLBACK
  166. //ãããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããããã
  167. //    Our numeric key filter. This is called each time the edit field this controls is
  168. //    attached to receives a keystroke. We can either accept the keystroke or block it.
  169. //    To do this, we return either kControlKeyFilterPassKey or kControlKeyFilterBlockKey.
  170. //
  171. pascal ControlKeyFilterResult
  172. TextPane::NumericFilter( ControlHandle control, SInt16* keyCode, SInt16* charCode, EventModifiers* modifiers)
  173. {
  174.     #pragma unused( control, keyCode, modifiers )
  175.  
  176.     if ( ((char)*charCode >= '0') && ((char)*charCode <= '9') )
  177.         return kControlKeyFilterPassKey;
  178.     
  179.     switch ( *charCode )
  180.     {
  181.         case '-':
  182.         case kLeftArrow:
  183.         case kRightArrow:
  184.         case kUpArrow:
  185.         case kDownArrow:
  186.         case kBackspace:
  187.             return kControlKeyFilterPassKey;
  188.  
  189.         default:
  190.             SysBeep( 10 );
  191.             return kControlKeyFilterBlockKey;
  192.     }
  193. }
  194.  
  195.